package com.codeZ.DecoratorPattern;

import java.nio.charset.StandardCharsets;
import java.util.Base64;

/**
 * 具体装饰者-对文件内容进行加密和解密
 *
 * @author codeZhang
 * @Date 2024/8/14 09:50
 */
public class EncryptionDataDecorator extends DataLoaderDecorator {


    public EncryptionDataDecorator(DataLoader wrapper) {
        super(wrapper);
    }

    @Override
    public String read() {
        return decode(super.read());
    }

    @Override
    public void write(String data) {
        super.write(encode(data));
    }


    /**
     * 加密操作
     * @param data 要加密的数据
     * @return 加密后的数据
     */
    private String encode(String data) {
        try {
            Base64.Encoder encoder = Base64.getEncoder();
            byte[] bytes = data.getBytes(StandardCharsets.UTF_8);
            return encoder.encodeToString(bytes);
        } catch (Exception e) {
            System.err.println(e.getMessage());
            return null;
        }
    }

    /**
     * 解密
     * @param data 加密后的数据
     * @return 解密后的数据
     */
    private String decode(String data) {

        try {
            Base64.Decoder decoder = Base64.getDecoder();
            return new String(decoder.decode(data), StandardCharsets.UTF_8);

        } catch (Exception e) {
            System.err.println(e.getMessage());

            return null;
        }
    }


}
